// 启动express服务
;(async function () {
  // 引入path模块
  const { resolve } = require('path')
  // 引入express
  const express = require('express')
  // 引入连接
  const connect = require('./db/connect')
  // 引入model
  const model = require('./db/model')

  // 判断是否连接成功
  try {
    await connect
    console.log('数据库连接成功')
  } catch (error) {
    return console.log('数据库连接失败', error)
  }

  // 启动express服务
  const app = express()
  // 配置中间件,处理post请求的数据
  app.use(express.urlencoded({ extended: false }))

  // 配置路由
  // 接口
  // 注册
  app.post('/registe', async (req, res) => {
    // 获取用户名和密码
    // 注意: 从body中结构数据的属性,决定了浏览器上传的属性名
    const { username, password } = req.body

    // 将用户上传的信息添加到数据库中
    // 注意: 添加数据到数据库中,属性名怎么写取决于schema中定义的属性
    await model.create({ username, password })

    // 添加数据库成功之后,响应浏览器告诉浏览器注册成功
    // 一般服务器响应给浏览器的信息中包含四个部分的内容(规范,可以不遵守)
    // code 后端和前端开发人员商量好的一个编码. 比如1代表成功
    // data 是后端响应给前端的具体数据.有时没有数据,则写成null
    // message 是后盾响应给前端的提示信息
    // status 表示当前请求是否成功的标记(用的不多,但是会写上)
    // 响应格式的规范:
    res.send({ code: 1, data: null, message: '注册成功', status: 'ok' })
    // 不遵守规范,也可以像下面这样写
    // res.send('成功了')
  })

  // 响应register.html页面
  app.get('/register', (req, res) => {
    res.sendFile(resolve(__dirname, 'view', 'register.html'))
  })

  // 响应index.css文件
  app.get('/index.css', (req, res) => {
    res.sendFile(resolve(__dirname, 'view', 'index.css'))
  })

  // 开启服务
  app.listen(5000, (err) => {
    if (err) console.log('失败', err)
    else console.log('成功')
  })
})()
